class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        if(triangle==null)return 0;
        List<List<Integer>> ans = new ArrayList<>();
        for(int i=0; i<triangle.size(); i++){
            List<Integer> res = new ArrayList<>();
            for(int j = 0; j<triangle.get(i).size(); j++){
                if(i==0&&j==0)res.add(triangle.get(0).get(0));
                else if(j==0)res.add(ans.get(i-1).get(j)+triangle.get(i).get(j));
                else if(j==triangle.get(i).size()-1)res.add(ans.get(i-1).get(j-1)+triangle.get(i).get(j));
                else res.add(Math.min(ans.get(i-1).get(j), ans.get(i-1).get(j-1))+triangle.get(i).get(j));
            }
            ans.add(res);
        }
        int n = Integer.MAX_VALUE;
        for(int i : ans.get(ans.size()-1)){
            n = Math.min(n, i);
        }
        return n;
    }
}